/*
 * Copyright (c) 2022  by Junzhao
 * THIS FILE IS PART OF JAVASE Song Huongkang PROJECT
 * All Rights Reserved.
 */

package 字符串.String类.String类常用方法;

import org.junit.Test;

/**
 * @description String类的常用方法
 *  int length()：返回字符串的长度： return value.length
 *  char charAt(int index)： 返回某索引处的字符return value[index]
 *  boolean isEmpty()：判断是否是空字符串：return value.length == 0
 *  String toLowerCase()：使用默认语言环境，将 String 中的所有字符转换为小写
 *  String toUpperCase()：使用默认语言环境，将 String 中的所有字符转换为大写
 *  String trim()：返回字符串的副本，忽略前导空白和尾部空白
 *  boolean equals(Object obj)：比较字符串的内容是否相同
 *  boolean equalsIgnoreCase(String anotherString)：与equals方法类似，忽略大
 *     小写
 *  String concat(String str)：将指定字符串连接到此字符串的结尾。 等价于用“+”
 *  int compareTo(String anotherString)：比较两个字符串的大小
 *  String substring(int beginIndex)：返回一个新的字符串，它是此字符串的从
 *     beginIndex开始截取到最后的一个子字符串。
 *  String substring(int beginIndex, int endIndex) ：返回一个新字符串，
 *     它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。
 *
 *
 *  boolean endsWith(String suffix)：测试此字符串是否以指定的后缀结束
 *  boolean startsWith(String prefix)：测试此字符串是否以指定的前缀开始
 *  boolean startsWith(String prefix, int toffset)：测试此字符串从指定索引开始的
 *     子字符串是否以指定前缀开始
 *
 *  boolean contains(CharSequence s)：当且仅当此字符串包含指定的 char 值序列
 *     时，返回 true
 *  int indexOf(String str)：返回指定子字符串在此字符串中第一次出现处的索引
 *  int indexOf(String str, int fromIndex)：返回指定子字符串在此字符串中第一次出
 *     现处的索引，从指定的索引开始
 *  int lastIndexOf(String str)：返回指定子字符串在此字符串中最右边出现处的索引
 *  int lastIndexOf(String str, int fromIndex)：返回指定子字符串在此字符串中最后
 *     一次出现处的索引，从指定的索引开始反向搜索
 *              注：indexOf和lastIndexOf方法如果未找到都是返回-1
 *
 *  String replace(char oldChar, char newChar)：返回一个新的字符串，它是
 *     通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
 *  String replace(CharSequence target, CharSequence replacement)：使
 *     用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
 *
 *  String replaceAll(String regex, String replacement) ： 使 用 给 定 的
 *     replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
 *  String replaceFirst(String regex, String replacement) ： 使 用 给 定 的
 *     replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
 *  boolean matches(String regex)：告知此字符串是否匹配给定的正则表达式。
 *  String[] split(String regex)：根据给定正则表达式的匹配拆分此字符串。
 *  String[] split(String regex, int limit)：根据匹配给定的正则表达式来拆分此
 * 字符串，最多不超过limit个，如果超过了，剩下的全部都放到最后一个元素中。
 *
 * @author 俊昭
 * @date 2022/4/14
*/
public class StringMethodsTest {
    public static void main(String[] args) {

    }
    @Test
    public void test5(){
        String s1 = "1234";
        int i1 = Integer.parseInt(s1);
        System.out.println(i1);
        double d1 = Double.parseDouble(s1);
        System.out.println(d1);
        // 其他同理
        int i2 =1234;
        String s4 = i2 +"";
        System.out.println(s4);
        String s2 = String.valueOf(i2);
        double d2 = 333.1;
        String s3 = String.valueOf(d2);
        System.out.println(s3);

    }
    @Test
    public void test4(){
        String s1 = "a a a a b b b b c c c c";

        String s2 = s1.replace("a","A");
        System.out.println(s2);

        String s3 = s1.replace("a ","AA");
        System.out.println(s3);
        String s4 = s1.replace(" a","AA");
        System.out.println(s4);

        // 省略正则表达式
    }
    @Test
    public void test3(){
        String s1 = "HelloWorldID";

        boolean b1 = s1.endsWith("ID");
        System.out.println(b1);

        boolean b2 = s1.startsWith("Hello");
        System.out.println(b2);

        boolean b3 = s1.startsWith("ll",2);
        System.out.println(b3);

        boolean b4 = s1.contains("ello");
        System.out.println(b4);

        // 以下方法未找到都是返回-1
        System.out.println(s1.indexOf("Wo"));// 第一次出现
        System.out.println(s1.indexOf("lo", 5));// 从一个位置开始第一次出现 左往右
        System.out.println(s1.lastIndexOf("l"));//最后一次出现
        System.out.println(s1.lastIndexOf("l",5));// 从一个位置开始最后一次出现 右往左
                                                                // （反向搜索第一次出现不就是最后一次出现吗！！！！！）
    }
    @Test
    public void test2(){
        String s1 = "Hello World";
        String s2 = "hello world";
        System.out.println(s1.equals(s2));
        System.out.println(s1.equalsIgnoreCase(s2));// 忽略大小写

        String s3 = s1.concat(" !");// 等价于 String s3 = s1 +" !";
        System.out.println(s3);

        String s4 = "abc";
        String s5 = "ade";
        System.out.println(s4.compareTo(s5));// a、b相等 c99 e101 结果为各自的 ASCII值 相减
                                            // 涉及字符串排序

        String s6 = "0123456789";
        String s7 = s6.substring(9);
        String s8 = s6.substring(0, 2);// 左闭右开！ [ )
        System.out.println(s7);
        System.out.println(s8);

    }
    @Test
    public void test1(){
        String s1 ="HelloWorld";
        int length = s1.length();
        System.out.println(s1 + " "+length);

        char c1 = s1.charAt(0);
        char c2 = s1.charAt(5);
        System.out.println(c1);
        System.out.println(c2);

        boolean b1 = s1.isEmpty();
        System.out.println(b1);

        String s2 = s1.toLowerCase();
        String s3 = s1.toUpperCase();

        System.out.println(s1 +" "+s2 +" "+ s3);// 体现了字符串的不可变性

        String s4 =" h e l l o ";
        System.out.println(s4 +"\n"+s4.trim());// 去除首尾空格

    }
}